package com.lovo.rb.service;

import com.lovo.dto.UserDto;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class MQService {

    @RabbitListener(queues = "oneQueue")
    public void getMessage(Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag, UserDto userDto) throws IOException {
      try {
          String userName = userDto.getUserName();
          int age = userDto.getAge();
          System.out.println(userName + "/" + age);
          int i = 1 / 0;
          System.out.println("执行业务......");
          channel.basicAck(tag, false); //false不批量操作
      }catch (Exception e){
          /**
           * tag：要拒绝的消息的唯一标识符。
           * multiple：一个布尔值，表示是否拒绝所有未确认的消息，如果为 true，则表示拒绝所有未确认的消息，如果为 false，则只拒绝指定 tag 的消息。
           * requeue：一个布尔值，表示是否将被拒绝的消息重新排队。如果为 true，则表示将被拒绝的消息重新排队，如果为 false，则表示将被拒绝的消息丢弃。
           */
         channel.basicNack(tag,false,true);
      }
    }

}
